package modelo.armas;

import modelo.moviles.exceptions.ArmaSinBalas;
import modelo.moviles.exceptions.ArsenalSinArmas;
import modelo.moviles.balas.Bala;


import java.util.*;



public class Arsenal {

	private Stack<Arma> arsenal;
	
	public Arsenal(){
		arsenal = new Stack<Arma>();
	}
	
	/* "Agregamos un arma al arsenal" */
	public void agregarArma(Arma armaNueva){
		arsenal.push(armaNueva);
	}

	/* "Devuelve el arma activa del arsenal" */ 
	public Arma armaActiva() {
		return arsenal.lastElement();
	}

	/* "Sacamos un arma al arsenal" */
	public Arma descartarArma() throws ArsenalSinArmas{
		if (!tieneArmas()){
			throw (new ArsenalSinArmas());
		}
		return (arsenal.pop());
	}

	/* "Dispara una bala del arma activa del arsenal" */
	public Bala disparar() throws ArsenalSinArmas {
		try {
			return armaActiva().disparar();
		} catch (ArmaSinBalas e) {
			throw (new ArsenalSinArmas());
		}
	}
	
	
	/* "Devuelve si el arsenal tiene al menos un arma con balas" */
	public boolean preparoArmaCargada(){
		if (tieneArmas()){
			if (armaActiva().puedeDisparar()){
				return true;
			} else{
				try{
					descartarArma();	
				} catch (ArsenalSinArmas e) {
					System.err.println(e.getDetalle());
				}
				return preparoArmaCargada();
			}
		}
		return false;
	}


	/* "Devuelve si el arsenal no esta vacio" */
	public boolean tieneArmas() {
		return !(arsenal.isEmpty());
	}

	public Stack<Arma> getArsenal() {
		return arsenal;
	}


}